Notwithstanding the power of modem microprocessors, such microprocessors can perform little, if any, work without reading and writing to external memory. When a microprocessor needs to access memory, it generates an address. The address corresponds to the particular location in memory that is of interest to the microprocessor. Most conventional memories are divided into rows and columns. The columns are formed by bit lines while the rows are formed by word lines. By specifying a row and a column, data that corresponds to the row and column may be read. Because the address generated by the microprocessor is not typically in a row/column format, a memory controller converts the microprocessor generated address into an address format that is suitable for a particular memory array.
During the fabrication of memories, one or more specific memory locations within a single memory device may become defective. If a microprocessor attempts to write data to a defective memory location, then the data may or may not be stored. For example, if the defective location is latched to the `1` state, then a `0` data bit could never be stored. Similarly, if a microprocessor attempts to read the data stored in the defective location, then the data read may or may not be accurate.
Conventional memory devices can contain millions of memory locations, only a few of which may be defective. A memory device that contains at least one defective location will be referred to as a defective memory device. In general, defective memory devices are discarded as unusable. Thus, a need exists for a memory controller that allows defective memory devices to be utilized.